package mencrypt

import (
	"crypto/hmac"
	"crypto/md5"
	"crypto/sha1"
	"crypto/sha256"
	"encoding/hex"
)

// HMACSign 使用指定密钥和算法生成签名
func HMACSign(data, key string, algorithm string) string {
	var mac []byte
	switch algorithm {
	case "sha1":
		h := hmac.New(sha1.New, []byte(key))
		h.Write([]byte(data))
		mac = h.Sum(nil)
	case "sha256":
		h := hmac.New(sha256.New, []byte(key))
		h.Write([]byte(data))
		mac = h.Sum(nil)
	default:
		panic("unsupported algorithm: " + algorithm)
	}
	return hex.EncodeToString(mac)
}

// SHA256String 返回字符串的 SHA256 哈希值
func SHA256String(s string) string {
	hash := sha256.New()
	hash.Write([]byte(s))
	return hex.EncodeToString(hash.Sum(nil))
}

// SHA1String 返回字符串的 SHA1 哈希值
func SHA1String(s string) string {
	hash := sha1.New()
	hash.Write([]byte(s))
	return hex.EncodeToString(hash.Sum(nil))
}

// MD5String 返回字符串的 MD5 哈希值
func MD5String(s string) string {
	hash := md5.New()
	hash.Write([]byte(s))
	return hex.EncodeToString(hash.Sum(nil))
}
